import Vue from 'vue'
import createStore from 'app/src/store/index'
import { getPermissions } from 'src/boot/home/common-info'
import { loadToken, translateToken } from 'yz-help'

const store = typeof createStore === 'function'
  ? createStore({ Vue })
  : createStore

/**
 ** sirio: 2020/02/18号
 ** 自定义指令用于切换tab页
 ** @param id
 */
function tabcur (el, binding, vnode) {
  let permissionIds = binding.value.tab

  hasPermission(permissionIds).then(res => {
    // 设置tab的v-maodel为拥有的第一个标签页
    vnode.componentInstance.value = res
  })
}

// 判断是否有权限
async function hasPermission (permissionIds) {
  // 判断vuex中是否存在权限映射列表
  if (store.getters.permissions.length === 0) {
    // 若不存在重新获取
    let res = await _getPermissions()
    // 提交状态管理
    store.commit('SET_PERMISSIONS', res.data)
  }

  let tabName = ''
  // 提取权限映射数组
  let permissionList = store.getters.permissions

  // 判断传入的权限id是否拥有，若返回所拥有的tab页中的第一个name并跳出循环
  for (const i of permissionIds) {
    if (permissionList.includes(i['id'])) {
      tabName = i['name']
      break
    }
  }

  return tabName
  // 判断按钮权限id在不再权限数组中
}

// 获取角色权限映射列表
function _getPermissions () {
  const token = loadToken()
  const userInfo = translateToken(token)
  const userId = userInfo.user_id
  return new Promise(resolve => {
    getPermissions(userId).then(res => {
      resolve(res)
    })
  })
}

export default tabcur
